home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Utilities / Converters / Convert_PICT / Source / CommentedPSCode / Polygons < prev    next >
Text File  |  1995-06-12  |  4KB  |  197 lines

  1. %BEGIN Polygons
  2.  
  3. % Copyright (C) 1993 David John Burrowes
  4. % Distributed under terms of GNU General Public License.
  5. % See COPYING.text in Convert PICT's CommentedPSCode for a copy
  6.  
  7. %%%%%%%%%%%%%
  8. %    Notes:
  9. %        PICTline is defined in the common file.  As is penWidth and penHeight
  10. %%%%%%%%%%%%%
  11.  
  12. %%%%%%%%%%%%%
  13. %    Name:    polyPath
  14. %    Syntax:    [x1 y1] ... [xN yN] N rect polyPath -
  15. %    About:    Builds a path corresponding to the polygon passed as set of x,y coords 
  16. %            (each coord in an array), count of these points, and bounding rectangle.
  17. %            Notes: This changes the clip path.  Call inside a gsave/restore.  We deliberately
  18. %            end with an open path, since mac polygons aren't always closed(?)
  19. %%%%%%%%%%%%%
  20. /polyPath
  21. {
  22.     /right    exch def
  23.     /bottom    exch def
  24.     /left    exch def
  25.     /top    exch def
  26.     /points exch def
  27.     %
  28.     %    Build the bounding/clipping rect, and intersect it with the current clip
  29.     %
  30.     newpath
  31.         left top moveto
  32.         right top lineto
  33.         right bottom lineto
  34.         left bottom lineto
  35.     closepath
  36.     clip
  37.     %
  38.     %    move to the first point on the stack, then, connect lines to each of the others
  39.     %
  40.     newpath
  41.         /ptarray exch def
  42.         ptarray 0 get
  43.         ptarray 1 get
  44.         moveto
  45.         points 1 sub
  46.         {
  47.             /ptarray exch def
  48.             ptarray 0 get
  49.             ptarray 1 get
  50.             lineto
  51.         }
  52.         repeat    % for (points-1) times
  53. } def
  54.  
  55. %%%%%%%%%%%%%
  56. %    Name:    framePoly        [0070]
  57. %    Syntax:    [x1 y1] ... [xN yN] N rect framePoly -
  58. %    About:    For each coordinate pair of the polygon, call PICTline so it is drawn with
  59. %            the right thickness and overhand.
  60. %            Note: framed polys don't seem affected by the bounding rect.
  61. %%%%%%%%%%%%%
  62. /framePoly
  63. {
  64.     /right    exch def
  65.     /bottom    exch def
  66.     /left    exch def
  67.     /top    exch def
  68.     /points exch def
  69.     gsave
  70.         penPattern usePattern
  71.         %
  72.         %    Retrieve the first point off the stack, and store.
  73.         %
  74.         /ptarray exch def
  75.         /lastX ptarray 0 get def
  76.         /lastY ptarray 1 get def
  77.         points 1 sub
  78.         {
  79.             %
  80.             %    Fetch next point, push last pt, and then define lastX and Y as the new
  81.             %    point.  Call PICTline with pushed pt. and 'last' pt.
  82.             %
  83.             /ptarray exch def
  84.             lastX lastY 
  85.             /lastX ptarray 0 get def
  86.             /lastY ptarray 1 get def
  87.             lastX lastY PICTline
  88.         }
  89.         repeat    % for (points-1) times
  90.     grestore
  91. }
  92. def
  93.  
  94. %%%%%%%%%%%%%
  95. %    Name:    paintPoly        [0071]
  96. %    Syntax:    [x1 y1] ... [xN yN] N rect paintPoly -
  97. %    About:    Given polygon data, build a path, fill with pen pattern
  98. %%%%%%%%%%%%%
  99. /paintPoly
  100. {
  101.     gsave
  102.         penPattern usePattern
  103.         polyPath
  104.         fill
  105.     grestore
  106. }
  107. def
  108.  
  109. %%%%%%%%%%%%%
  110. %    Name:    erasePoly        [0072]
  111. %    Syntax:    [x1 y1] ... [xN yN] N rect erasePoly -
  112. %    About:    Given polygon data, build a path, fill with background pattern
  113. %%%%%%%%%%%%%
  114. /erasePoly
  115. {
  116.     gsave
  117.         backPattern usePattern
  118.         polyPath
  119.         fill
  120.     grestore
  121. }
  122. def
  123.  
  124. %%%%%%%%%%%%%
  125. %    Name:    invertPoly        [0073]
  126. %    Syntax:    [x1 y1] ... [xN yN] N rect invertPoly -
  127. %    About:    Call polyPath to consume arguments.  But don't invert (dunno how)
  128. %%%%%%%%%%%%%
  129. /invertPoly
  130. {
  131.     gsave
  132.         polyPath
  133.     grestore
  134. }
  135. def
  136.  
  137. %%%%%%%%%%%%%
  138. %    Name:    fillPoly        [0074]
  139. %    Syntax:    [x1 y1] ... [xN yN] N rect fillPoly -
  140. %    About:    Passed a polygon, this builds the path, and fills it
  141. %%%%%%%%%%%%%
  142. /fillPoly
  143. {
  144.     gsave
  145.         fillPattern usePattern
  146.         polyPath
  147.         fill
  148.     grestore
  149. } def
  150.  
  151. %%%%%%%%%%%%%
  152. %    Name:    frameSamePoly        [0078]
  153. %    Syntax:    - frameSamePoly -
  154. %    About:    This is not implemented by Apple, so we do nothing here
  155. %%%%%%%%%%%%%
  156. /frameSamePoly
  157.     { }
  158. def
  159.  
  160. %%%%%%%%%%%%%
  161. %    Name:    paintSamePoly        [0079]
  162. %    Syntax:    - paintSamePoly -
  163. %    About:    This is not implemented by Apple, so we do nothing here
  164. %%%%%%%%%%%%%
  165. /paintSamePoly
  166.     { }
  167. def
  168.  
  169. %%%%%%%%%%%%%
  170. %    Name:    eraseSamePoly        [007A]
  171. %    Syntax:    - eraseSamePoly -
  172. %    About:    This is not implemented by Apple, so we do nothing here
  173. %%%%%%%%%%%%%
  174. /eraseSamePoly
  175.     { }
  176. def
  177.  
  178. %%%%%%%%%%%%%
  179. %    Name:    invertSamePoly        [007B]
  180. %    Syntax:    - invertSamePoly -
  181. %    About:    This is not implemented by Apple, so we do nothing here
  182. %%%%%%%%%%%%%
  183. /invertSamePoly
  184.     { }
  185. def
  186.  
  187. %%%%%%%%%%%%%
  188. %    Name:    fillSamePoly            [007C]
  189. %    Syntax:    - fillSamePoly -
  190. %    About:    This is not implemented by Apple, so we do nothing here
  191. %%%%%%%%%%%%%
  192. /fillSamePoly
  193.     { }
  194. def
  195.  
  196. %END Polygons
  197.